<?php

//Função inicial do compilador

function compilador($file) {

	$file_moved = upload($file['fileToUpload'], 'files');
	
	//Se o arquivo foi movido com sucesso
	if ($file_moved) {
		$output['codigo_maquina'] = step1($file_moved);
	}
	
	return $output;
	
}

//Função de upload de arquivos

function upload ($arquivo, $caminho){

	//Se o arquivo não for falso
	if (!(empty($arquivo))) {
		$arquivo1 = $arquivo;
		$arquivo_minusculo = strtolower($arquivo1['name']);
		$caracteres = array("�","~","^","]","[","{","}",";",":","�",",",">","<","-","/","|","@","$","%","�","�","�","�","�","�","�","�","+","=","*","&","(",")","!","#","?","`","�"," ","�");
		$arquivo_tratado = str_replace($caracteres, "", $arquivo_minusculo);
		
		$destino = $caminho ."/". $arquivo_tratado;

		//Move o arquivo para o destino final
		if (move_uploaded_file($arquivo1['tmp_name'], $destino)) {
			return $destino;
		}
		else {
			return FALSE;
		}
	}
}

function step1($file_moved) {

	//Abre o arquivo
	$file = fopen($file_moved, 'r');
	
	//Le todo o arquivo
	$conteudo = fread ($file, filesize ($file_moved));
	
	
	//Quebra o conteudo por linhas
	$conteudo_linhas = explode("\n", $conteudo);
	
	$tabela_html = '<table border="1" cellspacing="0" cellpadding="0">
						<tr>
							<td width="50">Linha</td>
							<td width="200">Instrucao</td>
							<td width="100">Atributo 1</td>
							<td width="100">Atributo 2</td>
							<td width="100">Comentario</td>
						</tr>';
	
	//Interação em cima das linhas do conteudo

	foreach ($conteudo_linhas as $linha) {
		
		$field_linha = FALSE;
		
		$field_instrucao = FALSE;
		$read_instrucao = FALSE;
		$field_atributo1 = FALSE;
		$read_atributo1 = FALSE;
		$field_atributo2 = FALSE;
		$read_atributo2 = FALSE;
		$field_comentario = FALSE;
		$read_comentario = FALSE;
		
		$campos['linha'] = ' ';
		$campos['instrucao'] = ' ';
		$campos['atributo1'] = ' ';
		$campos['atributo2'] = ' ';
		$campos['comentario'] = ' ';
	
		//Pega o tamanho da linha
		$count = strlen($linha);

		//@TODO Refazer exclusao de caracters inválidos pois nem sempre terá só espaços vazios
		
		//Verifica se a linha não é nula
		for ($i = 0; $i < $count; $i++) 
		{
			
			//Linha(Label)
			if($field_linha != TRUE)
			{
				if ($linha[$i] == ' ' )
				{
					$field_linha = TRUE;
					continue;
				}
				if ($linha[$i] != ' ')
				{
					$campos['linha'] .= $linha[$i];
					continue;
				}
			}
			
			//Instrucao
			if($field_instrucao != TRUE)
			{
				if($read_instrucao == TRUE && $linha[$i] == ' ')
				{
					$field_instrucao = TRUE;
					continue;
				}
				else if($linha[$i] == ' ')
					continue;
				else 
				{
					$campos['instrucao'] .= $linha[$i];
					$read_instrucao = TRUE;
					continue;
				}
			}
			
			//Atributo 1
			if($field_atributo1 != TRUE)
			{
				if($read_atributo1 == TRUE && $linha[$i] == ' ' )
				{
					$field_atributo1 = TRUE;
					continue;
				}
				else if($linha[$i] == ' ')
					continue;
				else 
				{
					$campos['atributo1'] .= $linha[$i];
					$read_atributo1 = TRUE;
					continue;
				}
			}

			//Atributo 2
			if($field_atributo2 != TRUE)
			{
				if($read_atributo2 == TRUE && $linha[$i] == ' ' )
				{
					$field_atributo2 = TRUE;
					continue;
				}
				else if($linha[$i] == ' ')
					continue;
				else 
				{
					$campos['atributo2'] .= $linha[$i];
					$read_atributo2 = TRUE;
					continue;
				}
			}
		
			//Comentario
			if($field_comentario != TRUE)
			{
				if($read_comentario == TRUE && $linha[$i] == ' ' )
				{
					$field_comentario = TRUE;
					continue;
				}
				else if($linha[$i] == ' ')
					continue;
				else 
				{
					$campos['comentario'] .= $linha[$i];
					$read_comentario = TRUE;
					continue;
				}
			}
		}
		
		$tabela_html .= '<tr>';
		foreach ($campos as $campo) {
			$tabela_html .= '<td>'. $campo .'</td>';
		}
		$tabela_html .= '</tr>';
	
	}
	
	$tabela_html .= '</table>';
	
	return $tabela_html;

}
	

?>